package com.itcast.quartz.main;

import com.itcast.quartz.job.HelloJob;
import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

public class HelloSchedulerDemo {
    public static void main(String[] args) throws SchedulerException {
        //1.调度器（Scheduler），从工厂中获取调度的实例（默认实例化new StdSchedulerFactory();）
        Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

        //2.任务实例（JobDetail）
        // 加载任务类，与HelloJob完成绑定，要求HelloJob实现Job接口
        JobDetail jobDetail = JobBuilder.newJob(HelloJob.class)
                //参数1：任务的名称（唯一实例）；参数2：任务组的名称，可选，默认DEFAULT
                .withIdentity("job1", "group1")
                //传递参数，名称message，保存到jobDataMap
                .usingJobData("message","打印日志")
                .usingJobData("jobName","jobDetail给jobName赋值")
                .usingJobData("count",0)
                .build();

        System.out.println("任务类：" + jobDetail.getJobClass().getName());
        System.out.println("名称：" + jobDetail.getKey().getName());
        System.out.println("组名称：" + jobDetail.getKey().getGroup());

        //3.触发器（Trigger）
        Trigger trigger = TriggerBuilder.newTrigger()
                //参数1：触发器的名称（唯一实例）；参数2：触发器组的名称
                .withIdentity("trigger1", "group1")
                .startNow()
                //每5秒执行一次
                .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(3))
                //传递参数，名称message，保存到jobDataMap
                .usingJobData("message","simple触发器")
                //Trigger会覆盖JobDetail中的相同key的值 ***
                .usingJobData("jobName","trigger给jobName赋值")
                .build();

        //让调度器关联任务和触发器，保证按照触发器定义的条件执行任务
        scheduler.scheduleJob(jobDetail, trigger);
        //启动
        scheduler.start();

    }
}
